home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
program
/
gucrtr13.lha
/
GUICreator1.3
/
GUIC.lha
/
GUICreator
/
Demos
/
Videothek
/
Videothek.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-22
|
38KB
|
837 lines
/*************************************************************************/
/* */
/* Includes */
/* */
/*************************************************************************/
#include "Videothek_Includes.h"
#include "Videothek.h"
/*************************************************************************/
/* */
/* Variables and Structures */
/* */
/*************************************************************************/
extern struct IntuitionBase *IntuitionBase;
extern struct GfxBase *GfxBase;
extern struct Library *GadToolsBase ;
extern struct Library *AslBase ;
extern struct Library *DataTypesBase;
/*************************************************************************/
/* */
/* Defines */
/* */
/*************************************************************************/
#define RASTERX (GfxBase->DefaultFont->tf_XSize)
#define RASTERY (GfxBase->DefaultFont->tf_YSize/2+4)
#define XSIZE(x) ((x)*RASTERX)
#define YSIZE(x) ((x)*RASTERY)
#define XPOS(x) (XSIZE(x)+customscreen->WBorLeft)
#define YPOS(x) (YSIZE(x)+customscreen->BarHeight+1)
#define ERROR_NO_WINDOW_OPENED 1001L
#define ERROR_NO_PUBSCREEN_LOCKED 1002L
#define ERROR_NO_GADGETS_CREATED 1003L
#define ERROR_NO_VISUALINFO 1004L
#define ERROR_NO_PICTURE_LOADED 1005L
#define ERROR_NO_GADGETLIST_CREATED 1006L
#define ERROR_NO_WINDOW_MENU 1007L
#define ERROR_SCREEN_TOO_SMALL 1008L
#define ERROR_LIST_NOT_INITIALIZED 1009L
/// struct HauptfensterData
struct HauptfensterData
{
BOOL gd_Disabled_Listview;
struct List *gd_Labels_Listview;
UWORD gd_Selected_Listview;
UWORD gd_Top_Listview;
BOOL gd_Disabled_Neu;
BOOL gd_Disabled_Aendern;
BOOL gd_Disabled_Loeschen;
BOOL gd_Disabled_ListeLoeschen;
BOOL gd_Disabled_Drucken;
BOOL gd_Disabled_Speichern;
};
///
/// struct EintragData
struct EintragData
{
BOOL gd_Disabled_Filmtitel;
char gd_String_Filmtitel[40];
BOOL gd_Disabled_Kassette;
ULONG gd_Number_Kassette;
BOOL gd_Disabled_Minuten;
ULONG gd_Number_Minuten;
BOOL gd_Disabled_Quelle;
UWORD gd_Active_Quelle;
char * *gd_Labels_Quelle;
BOOL gd_Disabled_Art;
UWORD gd_Active_Art;
char * *gd_Labels_Art;
BOOL gd_Disabled_Weiter;
};
///
/*************************************************************************/
/* */
/* Routines to handle gadgets */
/* */
/*************************************************************************/
/// HandleGadgetsHauptfenster()
void HandleGadgetsHauptfenster(struct Window *win,struct Gadget *wingads[],ULONG gadgetid,ULONG messagecode,struct HauptfensterData *gadgetdata,APTR userdata)
{
switch(gadgetid)
{
case LVID_Listview:
ListviewClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_Neu:
NeuClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_Aendern:
AendernClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_Loeschen:
LoeschenClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_ListeLoeschen:
ListeLoeschenClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_Drucken:
DruckenClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_Speichern:
SpeichernClicked(win,wingads,gadgetid,messagecode,userdata);
break;
};
}
///
/// HandleGadgetsEintrag()
void HandleGadgetsEintrag(struct Window *win,struct Gadget *wingads[],ULONG gadgetid,ULONG messagecode,struct EintragData *gadgetdata,APTR userdata)
{
switch(gadgetid)
{
case STID_Filmtitel:
FilmtitelClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case INID_Kassette:
KassetteClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case INID_Minuten:
MinutenClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case CYID_Quelle:
QuelleClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case CYID_Art:
ArtClicked(win,wingads,gadgetid,messagecode,userdata);
break;
case BTID_Weiter:
WeiterClicked(win,wingads,gadgetid,messagecode,userdata);
break;
};
}
///
/*************************************************************************/
/* */
/* Routines to create gadgets */
/* */
/*************************************************************************/
/// CreateGadgetsHauptfenster()
struct Gadget *CreateGadgetsHauptfenster(struct Gadget **gadgetlist,struct NewGadget newgad[],struct Gadget *wingads[],struct HauptfensterData *gadgetdata)
{
struct Gadget *gadget=CreateContext(gadgetlist);
if (gadget)
{
wingads[LVID_Listview]=gadget=CreateGadget(LISTVIEW_KIND,gadget,&newgad[LVID_Listview],GA_Disabled,gadgetdata->gd_Disabled_Listview,GTLV_Labels,gadgetdata->gd_Labels_Listview,GTLV_ReadOnly,FALSE,GTLV_Selected,gadgetdata->gd_Selected_Listview,GTLV_ShowSelected,NULL,GTLV_Top,gadgetdata->gd_Top_Listview,LAYOUTA_Spacing,0,TAG_END);
wingads[LAID_Gadget2]=gadget=CreateGadget(TEXT_KIND,gadget,&newgad[LAID_Gadget2],GT_Underscore,'_',GTTX_Border,FALSE,TAG_END);
wingads[BTID_Neu]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Neu],GA_Disabled,gadgetdata->gd_Disabled_Neu,GT_Underscore,'_',TAG_END);
wingads[BTID_Aendern]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Aendern],GA_Disabled,gadgetdata->gd_Disabled_Aendern,GT_Underscore,'_',TAG_END);
wingads[BTID_Loeschen]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Loeschen],GA_Disabled,gadgetdata->gd_Disabled_Loeschen,GT_Underscore,'_',TAG_END);
wingads[BTID_ListeLoeschen]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_ListeLoeschen],GA_Disabled,gadgetdata->gd_Disabled_ListeLoeschen,GT_Underscore,'_',TAG_END);
wingads[BTID_Drucken]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Drucken],GA_Disabled,gadgetdata->gd_Disabled_Drucken,GT_Underscore,'_',TAG_END);
wingads[BTID_Speichern]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Speichern],GA_Disabled,gadgetdata->gd_Disabled_Speichern,GT_Underscore,'_',TAG_END);
return gadget;
}
else return NULL;
}
///
/// CreateGadgetsEintrag()
struct Gadget *CreateGadgetsEintrag(struct Gadget **gadgetlist,struct NewGadget newgad[],struct Gadget *wingads[],struct EintragData *gadgetdata)
{
struct Gadget *gadget=CreateContext(gadgetlist);
if (gadget)
{
wingads[LAID_Gadget9]=gadget=CreateGadget(TEXT_KIND,gadget,&newgad[LAID_Gadget9],GT_Underscore,'_',GTTX_Border,FALSE,TAG_END);
wingads[LAID_Gadget10]=gadget=CreateGadget(TEXT_KIND,gadget,&newgad[LAID_Gadget10],GT_Underscore,'_',GTTX_Border,FALSE,TAG_END);
wingads[LAID_Gadget11]=gadget=CreateGadget(TEXT_KIND,gadget,&newgad[LAID_Gadget11],GT_Underscore,'_',GTTX_Border,FALSE,TAG_END);
wingads[STID_Filmtitel]=gadget=CreateGadget(STRING_KIND,gadget,&newgad[STID_Filmtitel],GA_Disabled,gadgetdata->gd_Disabled_Filmtitel,GA_TabCycle,TRUE,GTST_MaxChars,40,GTST_String,gadgetdata->gd_String_Filmtitel,GA_TabCycle,TRUE,STRINGA_ExitHelp,TRUE,STRINGA_Justification,GACT_STRINGLEFT,STRINGA_ReplaceMode,FALSE,TAG_END);
wingads[INID_Kassette]=gadget=CreateGadget(INTEGER_KIND,gadget,&newgad[INID_Kassette],GA_Disabled,gadgetdata->gd_Disabled_Kassette,GA_TabCycle,TRUE,GTIN_MaxChars,4,GTIN_Number,gadgetdata->gd_Number_Kassette,STRINGA_ExitHelp,TRUE,STRINGA_Justification,GACT_STRINGCENTER,STRINGA_ReplaceMode,TRUE,TAG_END);
wingads[INID_Minuten]=gadget=CreateGadget(INTEGER_KIND,gadget,&newgad[INID_Minuten],GA_Disabled,gadgetdata->gd_Disabled_Minuten,GA_TabCycle,TRUE,GTIN_MaxChars,3,GTIN_Number,gadgetdata->gd_Number_Minuten,STRINGA_ExitHelp,TRUE,STRINGA_Justification,GACT_STRINGCENTER,STRINGA_ReplaceMode,TRUE,TAG_END);
wingads[CYID_Quelle]=gadget=CreateGadget(CYCLE_KIND,gadget,&newgad[CYID_Quelle],GA_Disabled,gadgetdata->gd_Disabled_Quelle,GTCY_Labels,gadgetdata->gd_Labels_Quelle,GTCY_Active,gadgetdata->gd_Active_Quelle,TAG_END);
wingads[CYID_Art]=gadget=CreateGadget(CYCLE_KIND,gadget,&newgad[CYID_Art],GA_Disabled,gadgetdata->gd_Disabled_Art,GTCY_Labels,gadgetdata->gd_Labels_Art,GTCY_Active,gadgetdata->gd_Active_Art,TAG_END);
wingads[LAID_Gadget17]=gadget=CreateGadget(TEXT_KIND,gadget,&newgad[LAID_Gadget17],GT_Underscore,'_',GTTX_Border,FALSE,TAG_END);
wingads[LAID_Gadget18]=gadget=CreateGadget(TEXT_KIND,gadget,&newgad[LAID_Gadget18],GT_Underscore,'_',GTTX_Border,FALSE,TAG_END);
wingads[BTID_Weiter]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Weiter],GA_Disabled,gadgetdata->gd_Disabled_Weiter,GT_Underscore,'_',TAG_END);
return gadget;
}
else return NULL;
}
///
/*************************************************************************/
/* */
/* Routines to handle windows */
/* */
/*************************************************************************/
/// HandleHauptfenster()
void HandleHauptfenster(struct Screen *customscreen,LONG left,LONG top,APTR userdata)
{
APTR visualinfo=GetVisualInfo(customscreen,TAG_DONE);
if (visualinfo)
{
struct Gadget *gadgetlist = NULL;
struct Menu *menustrip = NULL;
ULONG height=34,width=66,maxheight=1024,maxwidth=1280;
struct Gadget *wingads[8];
char * title = "Videothek - © 1993-95 by Markus Hillenbrand";
struct Window *win = NULL;
struct TextAttr textattr = { GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name,GfxBase->DefaultFont->tf_YSize,FS_NORMAL,FPF_DISKFONT };
struct NewGadget newgad[] = {
XPOS(1),YPOS(2),XSIZE(64),YSIZE(25),NULL,&textattr,LVID_Listview,PLACETEXT_ABOVE,visualinfo,NULL,
XPOS(1),YPOS(0),XSIZE(64),YSIZE(2),"_Filme:",&textattr,LAID_Gadget2,PLACETEXT_IN,visualinfo,NULL,
XPOS(1),YPOS(27),XSIZE(16),YSIZE(2),"_Neu",&textattr,BTID_Neu,PLACETEXT_IN,visualinfo,NULL,
XPOS(17),YPOS(27),XSIZE(16),YSIZE(2),"Änd_ern",&textattr,BTID_Aendern,PLACETEXT_IN,visualinfo,NULL,
XPOS(33),YPOS(27),XSIZE(16),YSIZE(2),"_Löschen",&textattr,BTID_Loeschen,PLACETEXT_IN,visualinfo,NULL,
XPOS(49),YPOS(27),XSIZE(16),YSIZE(2),"L_iste löschen",&textattr,BTID_ListeLoeschen,PLACETEXT_IN,visualinfo,NULL,
XPOS(1),YPOS(31),XSIZE(25),YSIZE(2),"_Drucken auf Drucker",&textattr,BTID_Drucken,PLACETEXT_IN,visualinfo,NULL,
XPOS(40),YPOS(31),XSIZE(25),YSIZE(2),"_Speichern & Ende",&textattr,BTID_Speichern,PLACETEXT_IN,visualinfo,NULL,
};
struct HauptfensterData gadgetdata = {
/* belongs to a listview gadget */
FALSE,
(struct List *)~0,
0,
0,
/* belongs to a button */
FALSE,
/* belongs to a button */
FALSE,
/* belongs to a button */
FALSE,
/* belongs to a button */
FALSE,
/* belongs to a button */
FALSE,
/* belongs to a button */
FALSE,
};
struct NewMenu menu[] = {
NM_TITLE, "Program",0,0,0,0,
NM_ITEM ,"About","A",0,0,0,
};
height= YSIZE(height);
width = XSIZE(width) ;
if (left == -1) left = (customscreen->Width-width)/2;
if (top == -1) top = (customscreen->Height-height)/2;
if (CreateGadgetsHauptfenster(&gadgetlist,newgad,wingads,&gadgetdata) != NULL)
{
if (height>customscreen->Height || width>customscreen->Width) GUIC_ErrorReport(NULL,ERROR_SCREEN_TOO_SMALL);
win=OpenWindowTags(NULL,WA_Activate, TRUE,
WA_CloseGadget, TRUE,
WA_DepthGadget, TRUE,
WA_SizeGadget, TRUE,
WA_DragBar, TRUE,
WA_Gadgets, gadgetlist,
WA_InnerHeight, height,
WA_InnerWidth, width,
WA_IDCMP, IDCMP_CLOSEWINDOW|IDCMP_NEWSIZE|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW|IDCMP_GADGETUP|IDCMP_MENUPICK|BUTTONIDCMP|LISTVIEWIDCMP,
WA_Left, left,
WA_Top, top,
WA_MaxHeight, maxheight,
WA_MinHeight, height,
WA_MaxWidth, maxwidth,
WA_MinWidth, width,
WA_SizeBRight, FALSE,
WA_SizeBBottom, TRUE,
WA_SmartRefresh, TRUE,
WA_CustomScreen, customscreen,
WA_Title, title,
WA_NewLookMenus, TRUE,
TAG_END);
if (win)
{
menustrip=CreateMenus(menu,GTMN_NewLookMenus,TRUE,TAG_END);
if (menustrip)
{
if (LayoutMenus(menustrip,visualinfo,GTMN_NewLookMenus,TRUE,TAG_END))
{
if (SetMenuStrip(win,menustrip))
{
struct IntuiMessage *imessage = NULL;
struct Gadget *idcmpgad = NULL;
struct NewGadget ngcopy[] = newgad;
long double xscale = 1.0;
long double yscale = 1.0;
ULONG i = 0;
ULONG gadgetcount = 8;
ULONG idcmpclass = 0;
UWORD messagecode = 0;
BOOL running = TRUE;
ULONG signal = 0;
ULONG longpointer1 = 0;
ULONG longpointer2 = 0;
SetFont(win->RPort,GfxBase->DefaultFont);
GT_RefreshWindow(win,NULL);
/* User-Setup */
UserSetupHauptfenster(win,wingads,userdata);
do
{
WindowLimits(win,width+win->BorderLeft+win->BorderRight,height+win->BorderTop+win->BorderBottom,maxwidth,maxheight);
if (running) signal=Wait(SIGBREAKF_CTRL_C | 1L << win->UserPort->mp_SigBit);
if (signal & SIGBREAKF_CTRL_C) running=FALSE;
WindowLimits(win,win->Width,win->Height,win->Width,win->Height);
while (running && (imessage=GT_GetIMsg(win->UserPort)))
{
idcmpgad=(struct Gadget *)imessage->IAddress;
idcmpclass=imessage->Class;
messagecode =imessage->Code;
GT_ReplyIMsg(imessage);
switch(idcmpclass)
{
case IDCMP_REFRESHWINDOW:
GT_BeginRefresh(win);
GT_EndRefresh(win,TRUE);
break;
case IDCMP_MENUPICK:
switch(MENUNUM(messagecode))
{
case 0:
switch (ITEMNUM(messagecode))
{
case 0:
About(win,wingads,userdata);
break;
}
break;
}
break;
case IDCMP_NEWSIZE:
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GA_Disabled,&longpointer1,GTLV_Labels,&longpointer2,TAG_END);
gadgetdata.gd_Disabled_Listview=(longpointer1 == 0)?FALSE:TRUE;
gadgetdata.gd_Labels_Listview=(struct List *)longpointer2;
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GTLV_Top,&longpointer1,GTLV_Selected,&longpointer2,TAG_END);
gadgetdata.gd_Top_Listview=longpointer1;
gadgetdata.gd_Selected_Listview=longpointer2;
GT_GetGadgetAttrs(wingads[BTID_Neu],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_Neu=(longpointer1 == 0)?FALSE:TRUE;
GT_GetGadgetAttrs(wingads[BTID_Aendern],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_Aendern=(longpointer1 == 0)?FALSE:TRUE;
GT_GetGadgetAttrs(wingads[BTID_Loeschen],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_Loeschen=(longpointer1 == 0)?FALSE:TRUE;
GT_GetGadgetAttrs(wingads[BTID_ListeLoeschen],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_ListeLoeschen=(longpointer1 == 0)?FALSE:TRUE;
GT_GetGadgetAttrs(wingads[BTID_Drucken],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_Drucken=(longpointer1 == 0)?FALSE:TRUE;
GT_GetGadgetAttrs(wingads[BTID_Speichern],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_Speichern=(longpointer1 == 0)?FALSE:TRUE;
RemoveGList(win,gadgetlist,-1);
SetAPen(win->RPort,0L);
RectFill(win->RPort,win->BorderLeft,win->BorderTop,win->Width-win->BorderRight-1,win->Height-win->BorderBottom-1);
RefreshWindowFrame(win);
xscale=(long double)win->Width /(long double)(width+win->BorderLeft+win->BorderRight);
yscale=(long double)win->Height/(long double)(height+win->BorderTop+win->BorderBottom);
for (i=0;i<gadgetcount;i++)
{
ngcopy[i].ng_LeftEdge=(WORD)((long double)newgad[i].ng_LeftEdge*xscale);
ngcopy[i].ng_TopEdge =(WORD)((long double)newgad[i].ng_TopEdge *yscale);
ngcopy[i].ng_Width =(WORD)((long double)newgad[i].ng_Width *xscale);
ngcopy[i].ng_Height =(WORD)((long double)newgad[i].ng_Height *yscale);
}
FreeGadgets(gadgetlist);
gadgetlist=NULL;
CreateGadgetsHauptfenster(&gadgetlist,ngcopy,wingads,&gadgetdata);
AddGList(win,gadgetlist,-1,-1,NULL);
RefreshGList(gadgetlist,win,NULL,-1);
GT_RefreshWindow(win,NULL);
break;
case IDCMP_VANILLAKEY:
switch(messagecode)
{
case 'f':
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GTLV_Selected,&longpointer1,TAG_END);
GT_SetGadgetAttrs(wingads[LVID_Listview],win,NULL,GTLV_Selected,longpointer1+1,TAG_END);
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GTLV_Selected,&longpointer2,TAG_END);
if (longpointer2 != longpointer1)
{
HandleGadgetsHauptfenster(win,wingads,LVID_Listview,longpointer2,&gadgetdata,userdata);
}
}
break;
case 'F':
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
GT_GetGadgetAttrs(wingads[LVID_Listview],win,NULL,GTLV_Selected,&longpointer1,TAG_END);
if (longpointer1 != 0)
{
GT_SetGadgetAttrs(wingads[LVID_Listview],win,NULL,GTLV_Selected,longpointer1-1,TAG_END);
HandleGadgetsHauptfenster(win,wingads,LVID_Listview,longpointer1-1,&gadgetdata,userdata);
}
}
break;
case 'n':
GT_GetGadgetAttrs(wingads[BTID_Neu],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_Neu],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_Neu],GADGET_UP );
HandleGadgetsHauptfenster(win,wingads,BTID_Neu,messagecode,&gadgetdata,userdata);
}
break;
case 'e':
GT_GetGadgetAttrs(wingads[BTID_Aendern],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_Aendern],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_Aendern],GADGET_UP );
HandleGadgetsHauptfenster(win,wingads,BTID_Aendern,messagecode,&gadgetdata,userdata);
}
break;
case 'l':
GT_GetGadgetAttrs(wingads[BTID_Loeschen],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_Loeschen],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_Loeschen],GADGET_UP );
HandleGadgetsHauptfenster(win,wingads,BTID_Loeschen,messagecode,&gadgetdata,userdata);
}
break;
case 'i':
GT_GetGadgetAttrs(wingads[BTID_ListeLoeschen],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_ListeLoeschen],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_ListeLoeschen],GADGET_UP );
HandleGadgetsHauptfenster(win,wingads,BTID_ListeLoeschen,messagecode,&gadgetdata,userdata);
}
break;
case 'd':
GT_GetGadgetAttrs(wingads[BTID_Drucken],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_Drucken],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_Drucken],GADGET_UP );
HandleGadgetsHauptfenster(win,wingads,BTID_Drucken,messagecode,&gadgetdata,userdata);
}
break;
case 's':
GT_GetGadgetAttrs(wingads[BTID_Speichern],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_Speichern],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_Speichern],GADGET_UP );
HandleGadgetsHauptfenster(win,wingads,BTID_Speichern,messagecode,&gadgetdata,userdata);
}
break;
case 27:
running=FALSE;
break;
}
break;
case IDCMP_CLOSEWINDOW:
running=FALSE;
break;
case IDCMP_GADGETUP:
case MXIDCMP:
HandleGadgetsHauptfenster(win,wingads,idcmpgad->GadgetID,messagecode,&gadgetdata,userdata);
break;
}
/* end-switch */
}
/* end-while */
}
while (running);
ClearMenuStrip(win);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_MENU);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_MENU);
FreeMenus(menustrip);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_MENU);
if (win) CloseWindow(win);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_OPENED);
if (gadgetlist) FreeGadgets(gadgetlist);
}
else GUIC_ErrorReport(NULL,ERROR_NO_GADGETS_CREATED);
if (visualinfo) FreeVisualInfo(visualinfo);
}
else GUIC_ErrorReport(NULL,ERROR_NO_VISUALINFO);
}
///
/// HandleEintrag()
void HandleEintrag(struct Screen *customscreen,LONG left,LONG top,APTR userdata)
{
APTR visualinfo=GetVisualInfo(customscreen,TAG_DONE);
if (visualinfo)
{
struct Gadget *gadgetlist = NULL;
struct Menu *menustrip = NULL;
ULONG height=13,width=53,maxheight=1024,maxwidth=1280;
struct Gadget *wingads[11];
char * title = "Eintrag";
struct Window *win = NULL;
struct TextAttr textattr = { GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name,GfxBase->DefaultFont->tf_YSize,FS_NORMAL,FPF_DISKFONT };
struct NewGadget newgad[] = {
XPOS(1),YPOS(1),XSIZE(10),YSIZE(2),"_Filmtitel:",&textattr,LAID_Gadget9,PLACETEXT_IN,visualinfo,NULL,
XPOS(1),YPOS(4),XSIZE(10),YSIZE(2)," _Kassette:",&textattr,LAID_Gadget10,PLACETEXT_IN,visualinfo,NULL,
XPOS(1),YPOS(7),XSIZE(10),YSIZE(2)," _Minuten:",&textattr,LAID_Gadget11,PLACETEXT_IN,visualinfo,NULL,
XPOS(12),YPOS(1),XSIZE(40),YSIZE(2),NULL,&textattr,STID_Filmtitel,PLACETEXT_LEFT,visualinfo,NULL,
XPOS(12),YPOS(4),XSIZE(8),YSIZE(2),NULL,&textattr,INID_Kassette,PLACETEXT_LEFT,visualinfo,NULL,
XPOS(12),YPOS(7),XSIZE(8),YSIZE(2),NULL,&textattr,INID_Minuten,PLACETEXT_LEFT,visualinfo,NULL,
XPOS(30),YPOS(4),XSIZE(22),YSIZE(2),NULL,&textattr,CYID_Quelle,PLACETEXT_ABOVE,visualinfo,NULL,
XPOS(30),YPOS(7),XSIZE(22),YSIZE(2),NULL,&textattr,CYID_Art,PLACETEXT_ABOVE,visualinfo,NULL,
XPOS(22),YPOS(4),XSIZE(7),YSIZE(2),"_Quelle:",&textattr,LAID_Gadget17,PLACETEXT_IN,visualinfo,NULL,
XPOS(22),YPOS(7),XSIZE(7),YSIZE(2)," _Art:",&textattr,LAID_Gadget18,PLACETEXT_IN,visualinfo,NULL,
XPOS(1),YPOS(10),XSIZE(51),YSIZE(2),"_Weiter",&textattr,BTID_Weiter,PLACETEXT_IN,visualinfo,NULL,
};
char * LA_Quelle[] = { "Fernsehen","Videothek","selbst gedreht",NULL };
char * LA_Art[] = { "Science-Fiction","Karate","Western","Krimi","Action","Heimatfilm","Epos","Dokumentation","Zeichentrick","Abenteuer","Theater","Werbung","Horror","TV-Movie","Komödie","Liebesfilm","Sonstiges",NULL };
struct EintragData gadgetdata = {
/* belongs to a string gadget */
FALSE,
"",
/* belongs to an integer gadget */
FALSE,
0,
/* belongs to an integer gadget */
FALSE,
0,
/* belongs to a cycle gadget */
FALSE,
0,
(char * *)&LA_Quelle[0],
/* belongs to a cycle gadget */
FALSE,
0,
(char * *)&LA_Art[0],
/* belongs to a button */
FALSE,
};
struct NewMenu menu[] = {
NM_TITLE, "Program",0,0,0,0,
NM_ITEM ,"About","A",0,0,0,
};
height= YSIZE(height);
width = XSIZE(width) ;
if (left == -1) left = (customscreen->Width-width)/2;
if (top == -1) top = (customscreen->Height-height)/2;
if (CreateGadgetsEintrag(&gadgetlist,newgad,wingads,&gadgetdata) != NULL)
{
if (height>customscreen->Height || width>customscreen->Width) GUIC_ErrorReport(NULL,ERROR_SCREEN_TOO_SMALL);
win=OpenWindowTags(NULL,WA_Activate, TRUE,
WA_CloseGadget, TRUE,
WA_DepthGadget, TRUE,
WA_SizeGadget, TRUE,
WA_DragBar, TRUE,
WA_Gadgets, gadgetlist,
WA_InnerHeight, height,
WA_InnerWidth, width,
WA_IDCMP, IDCMP_CLOSEWINDOW|IDCMP_NEWSIZE|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW|IDCMP_GADGETUP|IDCMP_MENUPICK|BUTTONIDCMP|STRINGIDCMP|INTEGERIDCMP|CYCLEIDCMP,
WA_Left, left,
WA_Top, top,
WA_MaxHeight, maxheight,
WA_MinHeight, height,
WA_MaxWidth, maxwidth,
WA_MinWidth, width,
WA_SizeBRight, FALSE,
WA_SizeBBottom, TRUE,
WA_SmartRefresh, TRUE,
WA_CustomScreen, customscreen,
WA_Title, title,
WA_NewLookMenus, TRUE,
TAG_END);
if (win)
{
menustrip=CreateMenus(menu,GTMN_NewLookMenus,TRUE,TAG_END);
if (menustrip)
{
if (LayoutMenus(menustrip,visualinfo,GTMN_NewLookMenus,TRUE,TAG_END))
{
if (SetMenuStrip(win,menustrip))
{
struct IntuiMessage *imessage = NULL;
struct Gadget *idcmpgad = NULL;
struct NewGadget ngcopy[] = newgad;
long double xscale = 1.0;
long double yscale = 1.0;
char * stringpointer = NULL;
ULONG i = 0;
ULONG gadgetcount = 11;
ULONG idcmpclass = 0;
UWORD messagecode = 0;
BOOL running = TRUE;
ULONG signal = 0;
ULONG longpointer1 = 0;
ULONG longpointer2 = 0;
SetFont(win->RPort,GfxBase->DefaultFont);
GT_RefreshWindow(win,NULL);
/* User-Setup */
UserSetupEintrag(win,wingads,userdata);
do
{
WindowLimits(win,width+win->BorderLeft+win->BorderRight,height+win->BorderTop+win->BorderBottom,maxwidth,maxheight);
if (running) signal=Wait(SIGBREAKF_CTRL_C | 1L << win->UserPort->mp_SigBit);
if (signal & SIGBREAKF_CTRL_C) running=FALSE;
WindowLimits(win,win->Width,win->Height,win->Width,win->Height);
while (running && (imessage=GT_GetIMsg(win->UserPort)))
{
idcmpgad=(struct Gadget *)imessage->IAddress;
idcmpclass=imessage->Class;
messagecode =imessage->Code;
GT_ReplyIMsg(imessage);
switch(idcmpclass)
{
case IDCMP_REFRESHWINDOW:
GT_BeginRefresh(win);
GT_EndRefresh(win,TRUE);
break;
case IDCMP_MENUPICK:
switch(MENUNUM(messagecode))
{
case 0:
switch (ITEMNUM(messagecode))
{
case 0:
About(win,wingads,userdata);
break;
}
break;
}
break;
case IDCMP_NEWSIZE:
GT_GetGadgetAttrs(wingads[STID_Filmtitel],win,NULL,GA_Disabled,&longpointer1,GTST_String,&stringpointer,TAG_END);
gadgetdata.gd_Disabled_Filmtitel=(longpointer1 == 0)?FALSE:TRUE;
strcpy(gadgetdata.gd_String_Filmtitel,stringpointer);
GT_GetGadgetAttrs(wingads[INID_Kassette],win,NULL,GA_Disabled,&longpointer1,GTIN_Number,&longpointer2,TAG_END);
gadgetdata.gd_Disabled_Kassette=(longpointer1 == 0)?FALSE:TRUE;
gadgetdata.gd_Number_Kassette=longpointer2;
GT_GetGadgetAttrs(wingads[INID_Minuten],win,NULL,GA_Disabled,&longpointer1,GTIN_Number,&longpointer2,TAG_END);
gadgetdata.gd_Disabled_Minuten=(longpointer1 == 0)?FALSE:TRUE;
gadgetdata.gd_Number_Minuten=longpointer2;
GT_GetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GA_Disabled,&longpointer1,GTCY_Active,&longpointer2,TAG_END);
gadgetdata.gd_Disabled_Quelle=(longpointer1 == 0)?FALSE:TRUE;
gadgetdata.gd_Active_Quelle=longpointer2;
GT_GetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GTCY_Labels,&longpointer1,TAG_END);
gadgetdata.gd_Labels_Quelle=(char * *)longpointer1;
GT_GetGadgetAttrs(wingads[CYID_Art],win,NULL,GA_Disabled,&longpointer1,GTCY_Active,&longpointer2,TAG_END);
gadgetdata.gd_Disabled_Art=(longpointer1 == 0)?FALSE:TRUE;
gadgetdata.gd_Active_Art=longpointer2;
GT_GetGadgetAttrs(wingads[CYID_Art],win,NULL,GTCY_Labels,&longpointer1,TAG_END);
gadgetdata.gd_Labels_Art=(char * *)longpointer1;
GT_GetGadgetAttrs(wingads[BTID_Weiter],win,NULL,GA_Disabled,&longpointer1,TAG_END);
gadgetdata.gd_Disabled_Weiter=(longpointer1 == 0)?FALSE:TRUE;
RemoveGList(win,gadgetlist,-1);
SetAPen(win->RPort,0L);
RectFill(win->RPort,win->BorderLeft,win->BorderTop,win->Width-win->BorderRight-1,win->Height-win->BorderBottom-1);
RefreshWindowFrame(win);
xscale=(long double)win->Width /(long double)(width+win->BorderLeft+win->BorderRight);
yscale=(long double)win->Height/(long double)(height+win->BorderTop+win->BorderBottom);
for (i=0;i<gadgetcount;i++)
{
ngcopy[i].ng_LeftEdge=(WORD)((long double)newgad[i].ng_LeftEdge*xscale);
ngcopy[i].ng_TopEdge =(WORD)((long double)newgad[i].ng_TopEdge *yscale);
ngcopy[i].ng_Width =(WORD)((long double)newgad[i].ng_Width *xscale);
ngcopy[i].ng_Height =(WORD)((long double)newgad[i].ng_Height *yscale);
}
FreeGadgets(gadgetlist);
gadgetlist=NULL;
CreateGadgetsEintrag(&gadgetlist,ngcopy,wingads,&gadgetdata);
AddGList(win,gadgetlist,-1,-1,NULL);
RefreshGList(gadgetlist,win,NULL,-1);
GT_RefreshWindow(win,NULL);
break;
case IDCMP_VANILLAKEY:
switch(messagecode)
{
case 'f':
GT_GetGadgetAttrs(wingads[STID_Filmtitel],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0) ActivateGadget(wingads[STID_Filmtitel],win,NULL);
break;
case 'k':
GT_GetGadgetAttrs(wingads[INID_Kassette],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0) ActivateGadget(wingads[INID_Kassette],win,NULL);
break;
case 'm':
GT_GetGadgetAttrs(wingads[INID_Minuten],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0) ActivateGadget(wingads[INID_Minuten],win,NULL);
break;
case 'q':
GT_GetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[CYID_Quelle],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[CYID_Quelle],GADGET_UP );
GT_GetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GTCY_Active,&longpointer1,TAG_END);
if (++longpointer1 == 3) longpointer1=0;
GT_SetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GTCY_Active,longpointer1,TAG_END);
HandleGadgetsEintrag(win,wingads,CYID_Quelle,longpointer1,&gadgetdata,userdata);
}
break;
case 'Q':
GT_GetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[CYID_Quelle],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[CYID_Quelle],GADGET_UP );
GT_GetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GTCY_Active,&longpointer1,TAG_END);
if (longpointer1 == 0) longpointer1=3;
longpointer1--;
GT_SetGadgetAttrs(wingads[CYID_Quelle],win,NULL,GTCY_Active,longpointer1,TAG_END);
HandleGadgetsEintrag(win,wingads,CYID_Quelle,longpointer1,&gadgetdata,userdata);
}
break;
case 'a':
GT_GetGadgetAttrs(wingads[CYID_Art],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[CYID_Art],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[CYID_Art],GADGET_UP );
GT_GetGadgetAttrs(wingads[CYID_Art],win,NULL,GTCY_Active,&longpointer1,TAG_END);
if (++longpointer1 == 17) longpointer1=0;
GT_SetGadgetAttrs(wingads[CYID_Art],win,NULL,GTCY_Active,longpointer1,TAG_END);
HandleGadgetsEintrag(win,wingads,CYID_Art,longpointer1,&gadgetdata,userdata);
}
break;
case 'A':
GT_GetGadgetAttrs(wingads[CYID_Art],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[CYID_Art],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[CYID_Art],GADGET_UP );
GT_GetGadgetAttrs(wingads[CYID_Art],win,NULL,GTCY_Active,&longpointer1,TAG_END);
if (longpointer1 == 0) longpointer1=17;
longpointer1--;
GT_SetGadgetAttrs(wingads[CYID_Art],win,NULL,GTCY_Active,longpointer1,TAG_END);
HandleGadgetsEintrag(win,wingads,CYID_Art,longpointer1,&gadgetdata,userdata);
}
break;
case 'w':
GT_GetGadgetAttrs(wingads[BTID_Weiter],win,NULL,GA_Disabled,&longpointer1,TAG_END);
if (longpointer1 == 0)
{
ShowGadget(win,wingads[BTID_Weiter],GADGET_DOWN);
Delay(5);
ShowGadget(win,wingads[BTID_Weiter],GADGET_UP );
HandleGadgetsEintrag(win,wingads,BTID_Weiter,messagecode,&gadgetdata,userdata);
}
break;
case 27:
running=!EintragCloseWindow(win,wingads,userdata);
break;
}
break;
case IDCMP_CLOSEWINDOW:
running=!EintragCloseWindow(win,wingads,userdata);
break;
case IDCMP_GADGETUP:
case MXIDCMP:
HandleGadgetsEintrag(win,wingads,idcmpgad->GadgetID,messagecode,&gadgetdata,userdata);
break;
}
/* end-switch */
}
/* end-while */
}
while (running);
ClearMenuStrip(win);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_MENU);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_MENU);
FreeMenus(menustrip);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_MENU);
if (win) CloseWindow(win);
}
else GUIC_ErrorReport(win,ERROR_NO_WINDOW_OPENED);
if (gadgetlist) FreeGadgets(gadgetlist);
}
else GUIC_ErrorReport(NULL,ERROR_NO_GADGETS_CREATED);
if (visualinfo) FreeVisualInfo(visualinfo);
}
else GUIC_ErrorReport(NULL,ERROR_NO_VISUALINFO);
}
///